package struts2.sample07.action;

import java.util.LinkedList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.struts2.config.Result;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.MatchMode;

import struts2.sample07.mapping.User;

/**
 * 利用者マスタ検索アクション
 */
@Result("user_master.jsp")
public class UserMasterSearchAction {

	/** 検索条件：ユーザーID */
	private String userId;

	/** 検索結果 */
	private List<User> searchResults;

	/** hibernateのセッションファクトリー */
	private SessionFactory sessionFactory;
	
	
	/**
	 * 初期表示メソッド。
	 */
	public String init() {
		return "success";
	}
	
	/**
	 * 利用者検索メソッド。
	 */
	@SuppressWarnings({ "unchecked" })
	public String search(){
		searchResults = new LinkedList();
		Session dbSession = sessionFactory.openSession();
		
		try{
			// 検索条件オブジェクト
			Criteria criteria = dbSession.createCriteria(User.class);
			
			// userIdが入力されてたら検索条件に追加（部分一致）
			if(StringUtils.isNotEmpty(userId))
				criteria.add(Expression.like(
						"id", userId, MatchMode.ANYWHERE));
			
			// 検索実行
			List<User> list = criteria.list();
			
			searchResults.addAll(list);
		}finally{
			dbSession.close();
		}
		
		return "success";
	}
	
	
	//
	// setterとgetter
	//
	public String getUserId() {
		return userId;
	}

	public void setUserId(String userId) {
		this.userId = userId;
	}
	
	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	public List getSearchResults() {
		return searchResults;
	}

	public void setSearchResults(List searchResults) {
		this.searchResults = searchResults;
	}

}
